package org.s2015.testgdq.strformat;

//: strings/Receipt.java
import java.util.*;

/**
 * 格式化说明符
 * 
 * %[argument_index$][flags][width][.precision] conversion
 * 
 * width:控制一个域的最小尺寸，在默认情况下，数据是右对齐的，不过可以使用"-"来改变对齐方向
 * 
 * precision:指明最大尺寸
 * 
 * width可以应用于各种类型的数据转换，并且其行为方式都一样。precision则不然，
 * 不是所有类型的数据都能使用precision，而且，
 * 应用与不同类型的数据转换时
 * ，precision的意义也不同。在将precision应用与String时，它表示答应String时输出字符的最大数量。而用于浮点数时
 * ，它表示小数部分要显示出来的位数（默认是6位），如果小数位数过多则舍入，太少则末尾补零。precision无法用于整数。
 * 
 * @author Administrator
 *
 */
public class Receipt {
	private double total = 0;
	private Formatter f = new Formatter(System.out);

	public void printTitle() {
		f.format("%-15s %5s %10s\n", "Item", "Qty", "Price");
		f.format("%-15s %5s %10s\n", "----", "---", "-----");
	}

	public void print(String name, int qty, double price) {
		f.format("%-15.15s %5d %10.2f\n", name, qty, price);
		total += price;
	}

	public void printTotal() {
		f.format("%-15s %5s %10.2f\n", "Tax", "", total * 0.06);
		f.format("%-15s %5s %10s\n", "", "", "-----");
		f.format("%-15s %5s %10.2f\n", "Total", "", total * 1.06);
	}

	public static void main(String[] args) {
		Receipt receipt = new Receipt();
		receipt.printTitle();
		receipt.print("Jack's Magic Beans", 4, 4.25);
		receipt.print("Princess Peas", 3, 5.1);
		receipt.print("Three Bears Porridge", 1, 14.29);
		receipt.printTotal();
	}
} /*
 * Output: Item Qty Price ---- --- ----- Jack's Magic Be 4 4.25 Princess Peas 3
 * 5.10 Three Bears Por 1 14.29 Tax 1.42 ----- Total 25.06
 */// :~